System.register(['aurelia-metadata', './view-strategy', './view-engine', './html-behavior'], function (_export) {
'use strict';
var Origin, Metadata, ViewStrategy, UseViewStrategy, ViewEngine, HtmlBehaviorResource, CompositionEngine;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
return {
setters: [function (_aureliaMetadata) {
Origin = _aureliaMetadata.Origin;
Metadata = _aureliaMetadata.Metadata;
}, function (_viewStrategy) {
ViewStrategy = _viewStrategy.ViewStrategy;
UseViewStrategy = _viewStrategy.UseViewStrategy;
}, function (_viewEngine) {
ViewEngine = _viewEngine.ViewEngine;
}, function (_htmlBehavior) {
HtmlBehaviorResource = _htmlBehavior.HtmlBehaviorResource;
}],
execute: function () {
CompositionEngine = (function () {
function CompositionEngine(viewEngine) {
_classCallCheck(this, CompositionEngine);
this.viewEngine = viewEngine;
}
CompositionEngine.inject = function inject() {
return [ViewEngine];
};
CompositionEngine.prototype.activate = function activate(instruction) {
if (instruction.skipActivation || typeof instruction.viewModel.activate !== 'function') {
return Promise.resolve();
}
return instruction.viewModel.activate(instruction.model) || Promise.resolve();
};
CompositionEngine.prototype.createBehaviorAndSwap = function createBehaviorAndSwap(instruction) {
return this.createBehavior(instruction).then(function (behavior) {
behavior.view.bind(behavior.executionContext);
instruction.viewSlot.swap(behavior.view);
if (instruction.currentBehavior) {
instruction.currentBehavior.unbind();
}
return behavior;
});
};
CompositionEngine.prototype.createBehavior = function createBehavior(instruction) {
var childContainer = instruction.childContainer,
viewModelResource = instruction.viewModelResource,
viewModel = instruction.viewModel,
metadata;
return this.activate(instruction).then(function () {
var doneLoading, viewStrategyFromViewModel, origin;
if ('getViewStrategy' in viewModel && !instruction.view) {
viewStrategyFromViewModel = true;
instruction.view = ViewStrategy.normalize(viewModel.getViewStrategy());
}
if (instruction.view) {
if (viewStrategyFromViewModel) {
origin = Origin.get(viewModel.constructor);
if (origin) {
instruction.view.makeRelativeTo(origin.moduleId);
}
} else if (instruction.viewResources) {
instruction.view.makeRelativeTo(instruction.viewResources.viewUrl);
}
}
if (viewModelResource) {
metadata = viewModelResource.metadata;
doneLoading = metadata.load(childContainer, viewModelResource.value, instruction.view, true);
} else {
metadata = new HtmlBehaviorResource();
metadata.elementName = 'dynamic-element';
metadata.analyze(instruction.container || childContainer, viewModel.constructor);
doneLoading = metadata.load(childContainer, viewModel.constructor, instruction.view, true).then(function (viewFactory) {
return viewFactory;
});
}
return doneLoading.then(function (viewFactory) {
return metadata.create(childContainer, {
executionContext: viewModel,
viewFactory: viewFactory,
suppressBind: true,
host: instruction.host
});
});
});
};
CompositionEngine.prototype.createViewModel = function createViewModel(instruction) {
var childContainer = instruction.childContainer || instruction.container.createChild();
instruction.viewModel = instruction.viewResources ? instruction.viewResources.relativeToView(instruction.viewModel) : instruction.viewModel;
return this.viewEngine.importViewModelResource(instruction.viewModel).then(function (viewModelResource) {
childContainer.autoRegister(viewModelResource.value);
if (instruction.host) {
childContainer.registerInstance(Element, instruction.host);
}
instruction.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);
instruction.viewModelResource = viewModelResource;
return instruction;
});
};
CompositionEngine.prototype.compose = function compose(instruction) {
var _this = this;
instruction.childContainer = instruction.childContainer || instruction.container.createChild();
instruction.view = ViewStrategy.normalize(instruction.view);
if (instruction.viewModel) {
if (typeof instruction.viewModel === 'string') {
return this.createViewModel(instruction).then(function (instruction) {
return _this.createBehaviorAndSwap(instruction);
});
} else {
return this.createBehaviorAndSwap(instruction);
}
} else if (instruction.view) {
if (instruction.viewResources) {
instruction.view.makeRelativeTo(instruction.viewResources.viewUrl);
}
return instruction.view.loadViewFactory(this.viewEngine).then(function (viewFactory) {
var result = viewFactory.create(instruction.childContainer, instruction.executionContext);
instruction.viewSlot.swap(result);
return result;
});
} else if (instruction.viewSlot) {
instruction.viewSlot.removeAll();
return Promise.resolve(null);
}
};
return CompositionEngine;
})();
_export('CompositionEngine', CompositionEngine);
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL2NvbXBvc2l0aW9uLWVuZ2luZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7eUZBS2EsaUJBQWlCOzs7Ozs7Z0NBTHRCLE1BQU07a0NBQUMsUUFBUTs7bUNBQ2YsWUFBWTtzQ0FBRSxlQUFlOzsrQkFDN0IsVUFBVTs7MkNBQ1Ysb0JBQW9COzs7QUFFZix1QkFBaUI7QUFFakIsaUJBRkEsaUJBQWlCLENBRWhCLFVBQVUsRUFBQztnQ0FGWixpQkFBaUI7O0FBRzFCLGNBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQzlCOztBQUpVLHlCQUFpQixDQUNyQixNQUFNLEdBQUEsa0JBQUU7QUFBRSxpQkFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUU7O0FBRDVCLHlCQUFpQixXQU01QixRQUFRLEdBQUEsa0JBQUMsV0FBVyxFQUFDO0FBQ25CLGNBQUcsV0FBVyxDQUFDLGNBQWMsSUFBSSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBQztBQUNwRixtQkFBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7V0FDMUI7O0FBRUQsaUJBQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMvRTs7QUFaVSx5QkFBaUIsV0FjNUIscUJBQXFCLEdBQUEsK0JBQUMsV0FBVyxFQUFDO0FBQ2hDLGlCQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsUUFBUSxFQUFJO0FBQ3ZELG9CQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM5Qyx1QkFBVyxDQUFDLFFBQVEsQ0FBQyxJ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LEVBQUk7QUFDM0QsdUJBQU8sTUFBSyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztlQUNoRCxDQUFDLENBQUM7YUFDSixNQUFJO0FBQ0gscUJBQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hEO1dBQ0YsTUFBSyxJQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUM7QUFDeEIsZ0JBQUcsV0FBVyxDQUFDLGFBQWEsRUFBQztBQUMzQix5QkFBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNwRTs7QUFFRCxtQkFBTyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsV0FBVyxFQUFJO0FBQzNFLGtCQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDMUYseUJBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLHFCQUFPLE1BQU0sQ0FBQzthQUNmLENBQUMsQ0FBQztXQUNKLE1BQUssSUFBRyxXQUFXLENBQUMsUUFBUSxFQUFDO0FBQzVCLHVCQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2pDLG1CQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDOUI7U0FDRjs7ZUF6SFUsaUJBQWlCOzs7bUNBQWpCLGlCQUFpQiIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS90ZW1wbGF0aW5nL3NyYy9jb21wb3NpdGlvbi1lbmdpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09yaWdpbixNZXRhZGF0YX0gZnJvbSAnYXVyZWxpYS1tZXRhZGF0YSc7XG5pbXBvcnQge1ZpZXdTdHJhdGVneSwgVXNlVmlld1N0cmF0ZWd5fSBmcm9tICcuL3ZpZXctc3RyYXRlZ3knO1xuaW1wb3J0IHtWaWV3RW5naW5lfSBmcm9tICcuL3ZpZXctZW5naW5lJztcbmltcG9ydCB7SHRtbEJlaGF2aW9yUmVzb3VyY2V9IGZyb20gJy4vaHRtbC1iZWhhdmlvcic7XG5cbmV4cG9ydCBjbGFzcyBDb21wb3NpdGlvbkVuZ2luZSB7XG4gIHN0YXRpYyBpbmplY3QoKXsgcmV0dXJuIFtWaWV3RW5naW5lXTsgfVxuICBjb25zdHJ1Y3Rvcih2aWV3RW5naW5lKXtcbiAgICB0aGlzLnZpZXdFbmdpbmUgPSB2aWV3RW5naW5lO1xuICB9XG5cbiAgYWN0aXZhdGUoaW5zdHJ1Y3Rpb24pe1xuICAgIGlmKGluc3RydWN0aW9uLnNraXBBY3RpdmF0aW9uIHx8IHR5cGVvZiBpbnN0cnVjdGlvbi52aWV3TW9kZWwuYWN0aXZhdGUgIT09ICdmdW5jdGlvbicpe1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0cnVjdGlvbi52aWV3TW9kZWwuYWN0aXZhdGUoaW5zdHJ1Y3Rpb24ubW9kZWwpIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgY3JlYXRlQmVoYXZpb3JBbmRTd2FwKGluc3RydWN0aW9uKXtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCZWhhdmlvcihpbnN0cnVjdGlvbikudGhlbihiZWhhdmlvciA9PiB7XG4gICAgICBiZWhhdmlvci52aWV3LmJpbmQoYmVoYXZpb3IuZXhlY3V0aW9uQ29udGV4dCk7XG4gICAgICBpbnN0cnVjdGlvbi52aWV3U2xvdC5zd2FwKGJlaGF2aW9yLnZpZXcpO1xuXG4gICAgICBpZihpbnN0cnVjdGlvbi5jdXJyZW50QmVoYXZpb3Ipe1xuICAgICAgICBpbnN0cnVjdGlvbi5jdXJyZW50QmVoYXZpb3IudW5iaW5kKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiZWhhdmlvcjtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUJlaGF2aW9yKGluc3RydWN0aW9uKXtcbiAgICB2YXIgY2hpbGRDb250YWluZXIgPSBpbnN0cnVjdGlvbi5jaGlsZENvbnRhaW5lcixcbiAgICAgICAgdmlld01vZGVsUmVzb3VyY2UgPSBpbnN0cnVjdGlvbi52aWV3TW9kZWxSZXNvdXJjZSxcbiAgICAgICAgdmlld01vZGVsID0gaW5zdHJ1Y3Rpb24udmlld01vZGVsLFxuICAgICAgICBtZXRhZGF0YTtcblxuICAgIHJldHVybiB0aGlzLmFjdGl2YXRlKGluc3RydWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgIHZhciBkb25lTG9hZGluZywgdmlld1N0cmF0ZWd5RnJvbVZpZXdNb2RlbCwgb3JpZ2luO1xuXG4gICAgICBpZignZ2V0Vmlld1N0cmF0ZWd5JyBpbiB2aWV3TW9kZWwgJiYgIWluc3RydWN0aW9uLnZpZXcpe1xuICAgICAgICB2aWV3U3RyYXRlZ3lGcm9tVmlld01vZGVsID0gdHJ1ZTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlldyA9IFZpZXdTdHJhdGVneS5ub3JtYWxpemUodmlld01vZGVsLmdldFZpZXdTdHJhdGVneSgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RydWN0aW9uLnZpZXcpIHtcbiAgICAgICAgaWYodmlld1N0cmF0ZWd5RnJvbVZpZXdNb2RlbCl7XG4gICAgICAgICAgb3JpZ2luID0gT3JpZ2luLmdldCh2aWV3TW9kZWwuY29uc3RydWN0b3IpO1xuICAgICAgICAgIGlmKG9yaWdpbil7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbi52aWV3Lm1ha2VSZWxhdGl2ZVRvKG9yaWdpbi5tb2R1bGVJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9ZWxzZSBpZihpbnN0cnVjdGlvbi52aWV3UmVzb3VyY2VzKXtcbiAgICAgICAgICBpbnN0cnVjdGlvbi52aWV3Lm1ha2VSZWxhdGl2ZVRvKGluc3RydWN0aW9uLnZpZXdSZXNvdXJjZXMudmlld1VybCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYodmlld01vZGVsUmVzb3VyY2Upe1xuICAgICAgICBtZXRhZGF0YSA9IHZpZXdNb2RlbFJlc291cmNlLm1ldGFkYXRhO1xuICAgICAgICBkb25lTG9hZGluZyA9IG1ldGFkYXRhLmxvYWQoY2hpbGRDb250YWluZXIsIHZpZXdNb2RlbFJlc291cmNlLnZhbHVlLCBpbnN0cnVjdGlvbi52aWV3LCB0cnVlKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBtZXRhZGF0YSA9IG5ldyBIdG1sQmVoYXZpb3JSZXNvdXJjZSgpO1xuICAgICAgICBtZXRhZGF0YS5lbGVtZW50TmFtZSA9ICdkeW5hbWljLWVsZW1lbnQnO1xuICAgICAgICBtZXRhZGF0YS5hbmFseXplKGluc3RydWN0aW9uLmNvbnRhaW5lciB8fCBjaGlsZENvbnRhaW5lciwgdmlld01vZGVsLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgZG9uZUxvYWRpbmcgPSBtZXRhZGF0YS5sb2FkKGNoaWxkQ29udGFpbmVyLCB2aWV3TW9kZWwuY29uc3RydWN0b3IsIGluc3RydWN0aW9uLnZpZXcsIHRydWUpLnRoZW4odmlld0ZhY3RvcnkgPT4ge1xuICAgICAgICAgIHJldHVybiB2aWV3RmFjdG9yeTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkb25lTG9hZGluZy50aGVuKHZpZXdGYWN0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmNyZWF0ZShjaGlsZENvbnRhaW5lciwge1xuICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6dmlld01vZGVsLFxuICAgICAgICAgIHZpZXdGYWN0b3J5OnZpZXdGYWN0b3J5LFxuICAgICAgICAgIHN1cHByZXNzQmluZDp0cnVlLFxuICAgICAgICAgIGhvc3Q6aW5zdHJ1Y3Rpb24uaG9zdFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlVmlld01vZGVsKGluc3RydWN0aW9uKXtcbiAgICB2YXIgY2hpbGRDb250YWluZXIgPSBpbnN0cnVjdGlvbi5jaGlsZENvbnRhaW5lciB8fCBpbnN0cnVjdGlvbi5jb250YWluZXIuY3JlYXRlQ2hpbGQoKTtcblxuICAgIGluc3RydWN0aW9uLnZpZXdNb2RlbCA9IGluc3RydWN0aW9uLnZpZXdSZXNvdXJjZXNcbiAgICAgICAgPyBpbnN0cnVjdGlvbi52aWV3UmVzb3VyY2VzLnJlbGF0aXZlVG9WaWV3KGluc3RydWN0aW9uLnZpZXdNb2RlbClcbiAgICAgICAgOiBpbnN0cnVjdGlvbi52aWV3TW9kZWw7XG5cbiAgICByZXR1cm4gdGhpcy52aWV3RW5naW5lLmltcG9ydFZpZXdNb2RlbFJlc291cmNlKGluc3RydWN0aW9uLnZpZXdNb2RlbCkudGhlbih2aWV3TW9kZWxSZXNvdXJjZSA9PiB7XG4gICAgICBjaGlsZENvbnRhaW5lci5hdXRvUmVnaXN0ZXIodmlld01vZGVsUmVzb3VyY2UudmFsdWUpO1xuXG4gICAgICBpZihpbnN0cnVjdGlvbi5ob3N0KXtcbiAgICAgICAgY2hpbGRDb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZShFbGVtZW50LCBpbnN0cnVjdGlvbi5ob3N0KTtcbiAgICAgIH1cblxuICAgICAgaW5zdHJ1Y3Rpb24udmlld01vZGVsID0gY2hpbGRDb250YWluZXIudmlld01vZGVsID0gY2hpbGRDb250YWluZXIuZ2V0KHZpZXdNb2RlbFJlc291cmNlLnZhbHVlKTtcbiAgICAgIGluc3RydWN0aW9uLnZpZXdNb2RlbFJlc291cmNlID0gdmlld01vZGVsUmVzb3VyY2U7XG4gICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XG4gICAgfSk7XG4gIH1cblxuICBjb21wb3NlKGluc3RydWN0aW9uKXtcbiAgICBpbnN0cnVjdGlvbi5jaGlsZENvbnRhaW5lciA9IGluc3RydWN0aW9uLmNoaWxkQ29udGFpbmVyIHx8IGluc3RydWN0aW9uLmNvbnRhaW5lci5jcmVhdGVDaGlsZCgpO1xuICAgIGluc3RydWN0aW9uLnZpZXcgPSBWaWV3U3RyYXRlZ3kubm9ybWFsaXplKGluc3RydWN0aW9uLnZpZXcpO1xuXG4gICAgaWYoaW5zdHJ1Y3Rpb24udmlld01vZGVsKXtcbiAgICAgIGlmKHR5cGVvZiBpbnN0cnVjdGlvbi52aWV3TW9kZWwgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmlld01vZGVsKGluc3RydWN0aW9uKS50aGVuKGluc3RydWN0aW9uID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCZWhhdmlvckFuZFN3YXAoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCZWhhdmlvckFuZFN3YXAoaW5zdHJ1Y3Rpb24pO1xuICAgICAgfVxuICAgIH1lbHNlIGlmKGluc3RydWN0aW9uLnZpZXcpe1xuICAgICAgaWYoaW5zdHJ1Y3Rpb24udmlld1Jlc291cmNlcyl7XG4gICAgICAgIGluc3RydWN0aW9uLnZpZXcubWFrZVJlbGF0aXZlVG8oaW5zdHJ1Y3Rpb24udmlld1Jlc291cmNlcy52aWV3VXJsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RydWN0aW9uLnZpZXcubG9hZFZpZXdGYWN0b3J5KHRoaXMudmlld0VuZ2luZSkudGhlbih2aWV3RmFjdG9yeSA9PiB7XG4gICAgICAgIHZhciByZXN1bHQgPSB2aWV3RmFjdG9yeS5jcmVhdGUoaW5zdHJ1Y3Rpb24uY2hpbGRDb250YWluZXIsIGluc3RydWN0aW9uLmV4ZWN1dGlvbkNvbnRleHQpO1xuICAgICAgICBpbnN0cnVjdGlvbi52aWV3U2xvdC5zd2FwKHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9ZWxzZSBpZihpbnN0cnVjdGlvbi52aWV3U2xvdCl7XG4gICAgICBpbnN0cnVjdGlvbi52aWV3U2xvdC5yZW1vdmVBbGwoKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuICB9XG59XG4iXX0= |